package br.com.baco.usuario.persistencia;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import br.com.baco.persistencia.AndroidDatabase;
import br.com.baco.usuario.dominio.Usuario;

public class UsuarioDAO extends AndroidDatabase implements IUsuarioDAO {
	private final String NOME_TABELA =  "usuarios";
	private final String COLUNA_ID   =  "id";
	private final String COLUNA_NOME   =  "nome";
	private final String COLUNA_SOBRENOME   =  "sobrenome";
	private final String COLUNA_DATA_NASC   =  "data_nasc";
	

	public UsuarioDAO(Context context) {
		// TODO Auto-generated constructor stub
		super(context);
	}

	@Override
	public boolean salvar(Usuario usuario) {
		this.openConnection(); 
		
		ContentValues values = this.getContentValues(usuario); //Convertendo as informa��es do objeto para o valor a ser salvo.
		if(this.database.insert(NOME_TABELA, null, values) != -1){
			this.closeConnection();
			return true;
		}
		
		this.closeConnection();
		return false;
	}

	@Override
	public boolean editar(Usuario usuario) {
		// TODO Auto-generated method stub
		ContentValues values = this.getContentValues(usuario);
		this.openConnection();
		String[] substitutesValues = {
                String.valueOf(usuario.getId())
        };
		
		if(this.database.update(NOME_TABELA, values, COLUNA_ID + " = ?", substitutesValues) != 0){
			this.closeConnection();
			return true;
		}
		
		this.closeConnection();
		return false;
	}

/*	@Override
	public boolean excluir(Usuario usuario) {
		// TODO Auto-generated method stub
		this.openConnection();
		String[] substitutesValues = {
				 String.valueOf(usuario.getId())
		};
		if(this.database.delete(NOME_TABELA, COLUNA_ID + " =  ?", substitutesValues) != 0){
			 this.closeConnection();
			 return true;
		}
		this.closeConnection();
		return false;
	}*/

	@Override
	public Usuario get() {
		// TODO Auto-generated method stub
		this.openConnection();
		String query = "SELECT * FROM " + NOME_TABELA;
        Cursor cursor = this.database.rawQuery(query, null);
        List<Usuario> usuarios = this.getObjectOfCursor(cursor);
        this.closeConnection();
        System.out.println("DAOOOO");
        System.out.println(usuarios.get(0).getNome());
        return usuarios.isEmpty()? null: usuarios.get(0);
	}

	@Override
	public ContentValues getContentValues(Usuario usuario) {
		
		ContentValues values = new ContentValues();
	    values.put( COLUNA_NOME		, usuario.getNome() );
	    values.put( COLUNA_SOBRENOME, usuario.getSobrenome() );
	    values.put( COLUNA_DATA_NASC , usuario.getDataNasc() );
		
	    return values;
	}

	@Override
	public List<Usuario> getObjectOfCursor(Cursor cursor) {
		// TODO Auto-generated method stub
		List<Usuario> usuarios = new ArrayList<Usuario>();
        if(cursor == null)
            return usuarios;
         
        try {
 
            if (cursor.moveToFirst()) {
                do {
 
                    int indexId = cursor.getColumnIndex(COLUNA_ID);
                    int indexNome = cursor.getColumnIndex(COLUNA_NOME);
                    int indexSobrenome = cursor.getColumnIndex(COLUNA_SOBRENOME);
                    int indexDataNasc = cursor.getColumnIndex(COLUNA_DATA_NASC);
                    
                    Usuario usuario = new Usuario();
                    usuario.setId(cursor.getInt(indexId));
                    usuario.setNome(cursor.getString(indexNome));
                    usuario.setSobrenome(cursor.getString(indexSobrenome));
                    usuario.setDataNasc(cursor.getString(indexDataNasc));
                    usuarios.add(usuario);
 
                } while (cursor.moveToNext());
            }
             
        } finally {
            cursor.close();
        }
        return usuarios;
	}

}
